/**
 * n个大小的数组A，找出数组中未出现的最小正整数
 * 注意一些数量的关系
 * 一种极端情况是这个数组存储的正好就是1-n，此时未出现的最小整数是n+1
 * 如果这是数组存储的部分元素不再1-n范围内，那么未出现的最小整数必然落在1-n内
 * 所以没有必要判断大范围是否存在最小整数
 * 
 * 可以使用这种方法：
 * 申请一片长度为n的数组T，下标含义是A中的元素，值是这个元素是否出现过，若出现过就标记为1，否则为0
 * 遍历数组T，找到第一个不是0的元素，其下标+1就是第一个A中未出现的元素
 * 如果全身1，那么直接返回n+1即可
 * 
 * 时间复杂度：O(n)
 * 空间复杂度：O(n)
 */
#include<stdio.h>
#include<stdlib.h>

int findMissMin(int a[],int n){
    int i,*b;
    b=(int*)malloc(sizeof(int)*n);
    memset(b,0,sizeof(int)*n);
    for(i=0;i<n;i++){
        if(a[i]>0&&a[i]<=n){
            b[a[i]-1]=1;
        }
    }
    for(i=0;i<n;i++){
        if(b[i]==0)break;
    }
    return i+1;
}